﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NHibernate.Mapping.Attributes;

namespace VemTransporte.Models.Basica
{
    [Class(Table="Veiculo")]
    public class Veiculo
    {
        #region Atributos
        private int id = 0;
        private string placa;    
        private Linha _Linha;
        private Empresa _Empresa;
        private IList<Localizacao> _Localizacoes;
        private IList<VeiculoParada> _VeiculoParadas;
        #endregion

        #region Propriedades
        [Id(Name = "Id", Column = "PK_IdVeiculo")]
        [Generator(1, Class = "native")]
        public virtual int Id
        {
            get { return id; }
            set { id = value; }
        }

        [Property(Column="VEI_Placa")]
        public virtual string Placa
        {
            get { return placa; }
            set { placa = value; }
        }

        [ManyToOne(Name = "Linha", Column = "FK_IdLinha", ClassType = typeof(Linha), Fetch = FetchMode.Join)]
        public virtual Linha Linha
        {
            get { return _Linha; }
            set { _Linha = value; }
        }

        [Bag(Fetch = CollectionFetchMode.Join, Cascade = "all")]
        [Key(1, Column = "FK_IdVeiculo")]
        [OneToMany(2, ClassType = typeof(Localizacao))]
        public virtual IList<Localizacao> Localizacoes
        {
            get { return _Localizacoes; }
            set { _Localizacoes = value; }
        }

        public virtual void AddLocalizacao(Localizacao localizacao)
        {
            localizacao.Veiculo = this;
            this._Localizacoes.Add(localizacao);
        }

        [ManyToOne(Name = "Empresa", Column = "FK_IdEmpresa", ClassType = typeof(Empresa), Fetch = FetchMode.Join)]
        public virtual Empresa Empresa
        {
            get { return _Empresa; }
            set { _Empresa = value; }
        }

        [Bag(Fetch = CollectionFetchMode.Join, Cascade = "all")]
        [Key(1, Column = "FK_IdVeiculo")]
        [OneToMany(2, ClassType = typeof(VeiculoParada))]
        public virtual IList<VeiculoParada> VeiculoParadas
        {
            get { return _VeiculoParadas; }
            set { _VeiculoParadas = value; }
        }

        public virtual void AddVeiculoParada(VeiculoParada veiculoParada)
        {
            veiculoParada.Veiculo = this;
            this._VeiculoParadas.Add(veiculoParada);
        }
        #endregion

        #region Contrutores
        public Veiculo() { }
        #endregion
    }
}